package com.woniuxy.config;

import com.woniuxy.entity.My86Clazz;
import com.woniuxy.entity.Student;
import com.woniuxy.entity.Teacher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: 马宇航
 * @Todo: 模拟xml的形式使用javaconfig模式配置bean对象的注入关系
 * @DateTime: 22/04/07/0007 下午 4:53
 * @Component: 成都蜗牛学苑
 **/
@Configuration
public class MockXmlConfigurationBeans {
    /**
     * @Bean注解的使用，类似之前的xml中的配置
     * <bean id="teacher" class="">
     *     <constructor-arg name="name" value="马宇航"></constructor-arg>
     * </bean>
    **/
    @Bean
    public Teacher teacher(){
        // <constructor-arg name="name" value="马宇航"></constructor-arg>
        return new Teacher("马宇航");
    }
    @Bean
    public Teacher teacher1(){
        // <constructor-arg name="name" value="马宇航"></constructor-arg>
        return new Teacher("雷老师");
    }
    /**
     * @Bean注解的使用，类似之前的xml中的配置,多了一个形参？形参是哪里来的？
     * <bean id="my86Clazz" class="My86Clazz">
     *     形参名称 对应的是 ref后面的名称
     *      <property name="teacher" ref="teacher1"></property>
     * </bean>
     **/
    //@Bean 对应方法的形参，spring底层，会去找到对应的bean对象，来帮你注入进去
    // 默认用的是@Resource
    // 根据byName优先注入，如果没有名称，则使用的是byType
    @Bean
    public My86Clazz my86Clazz(Teacher teacher,List<Student> productionStudents){
        My86Clazz my86Clazz = new My86Clazz();
        my86Clazz.setName("86期");
        my86Clazz.setTeacher(teacher);
        my86Clazz.setSudents(productionStudents);
        return my86Clazz;
    }
    /**
     * <util:list id="productionStudents">
     *       <bean class="Student">
     *          <constructor-arg name="name" value="苏寅洪"></constructor-arg>
     *       </bean>
     *       <bean class="Student">
     *          <constructor-arg name="name" value="邓云溪"></constructor-arg>
     *       </bean>
     *       <bean class="Student">
     *           <constructor-arg name="name" value="许泊宁"></constructor-arg>
     *       </bean>
     * </util:list>
    **/
    @Bean
    public List<Student> productionStudents(){
        List<Student> list = new ArrayList<>();
        list.add(new Student("苏寅洪"));
        list.add(new Student("邓云溪"));
        list.add(new Student("许泊宁"));
        return list;
    }
}
